package lq.common.validate;

import lq.common.annotation.IsMobile;
import lq.common.entity.RegexpConstant;
import lq.common.utils.StudyUtil;
import org.apache.commons.lang3.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * @program: cloud-study
 * @description: 自定义验证逻辑需要实现ConstraintValidator, 有两个泛型, 第一个为自定义注解类, 第二个为要校验的数据类型
 *
 * 这个自定义注解逻辑处理类由于实现了ConstraintValidator接口，
 * 所以它默认被spring管理成bean,
 * 所以可以在这个逻辑处理类里面用@Autowiredu或者@Resources注入别的服务，
 * 而且不用在类上面用@Compent注解成spring的bean.
 *
 * @author: LQ
 * @create: 2021-02-04 11:10
 */

public class MobileValidator implements ConstraintValidator<IsMobile, String> {
    /**
     * 自定义数据校验初始化方法
     *
     * @param isMobile
     */
    @Override
    public void initialize(IsMobile isMobile) {

    }

    /**
     * 验证的具体逻辑方法，返回true,则验证通过，否则则不通过。
     *
     * @param s
     * @param constraintValidatorContext
     * @return 验证是否成功, true:成功,false:失败
     */
    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        try {
            if (StringUtils.isBlank(s)) {
                return true;
            } else {
                String regex = RegexpConstant.MOBILE_REG;
                return StudyUtil.match(regex, s);
            }
        } catch (Exception e) {
            return false;
        }
    }
}
